import * as Cesium from 'cesium'

export default class FogEffect {
    constructor() {
      this.stage = null
    }

    init(viewer) {
      this.stage = new Cesium.PostProcessStage({
        name: 'fog',
        fragmentShader: `
        uniform sampler2D colorTexture;
        uniform sampler2D depthTexture;
        uniform float visibility;
        uniform vec4 fogColor;
        in vec2 v_textureCoordinates;
        out vec4 fragColor;
        void main(void) {
          vec4 origcolor = texture(colorTexture, v_textureCoordinates);
          float depth = czm_readDepth(depthTexture, v_textureCoordinates);
          vec4 depthcolor = texture(depthTexture, v_textureCoordinates);
          float f = visibility * (depthcolor.r - 0.3) / 0.2;
          if (f < 0.0) f = 0.0;
          else if (f > 1.0) f = 1.0;
          fragColor = mix(origcolor, fogColor, f);
        }`,
        uniforms: {
          visibility: 0.1,
          fogColor: new Cesium.Color(0.8, 0.8, 0.8, 0.5)
        }
      })
      viewer.scene.postProcessStages.add(this.stage)
    }
    show(visible) {
      if(this.stage) this.stage.enabled = visible
    }
}